package ru.niir.goodfil.db;

import org.apache.commons.lang.StringUtils;

import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.Column;
import java.io.Serializable;

/**
 * Расширенная информация о доставке, связанная с карточкой клиента.
 * Информация о доставке копируется в заказ по-умолчанию при его создании.
 * Позже менеджер может либо оставить эту "дефолтную" информацию о доставке либо изменить ее.
 */
@Entity
@Table(name = "`ClientsDeliveryInfoExt`")
public class ClientDeliveryInfoExt implements Serializable {
    public String toString() {
        return "ClientDeliveryInfoExt{" +
                "clientId=" + clientId +
                ", payType=" + payType +
                ", transportName='" + transportName + '\'' +
                ", transportContactFio='" + transportContactFio + '\'' +
                ", transportAddress='" + transportAddress + '\'' +
                ", transportTel='" + transportTel + '\'' +
                ", targetAddress='" + targetAddress + '\'' +
                ", targetContactFio='" + targetContactFio + '\'' +
                ", targetTel='" + targetTel + '\'' +
                ", period=" + period +
                ", comment='" + comment + '\'' +
                '}';
    }

    public ClientDeliveryInfoExt(long clientId) {
        this.clientId = clientId;
    }

    public ClientDeliveryInfoExt() {
    }

    /**
     * Идентификатор клиента
     */
    @Id
    @Column(name = "`IdClient`")
    private long clientId = -1;

    /**
     * Тип оплаты (1 - наличный расчет, 0 - безналичный)
     */
    @Column(name = "`PayType`")
    private boolean payType;

    /**
     * Наименование транспортной компании
     */
    @Column(name = "`TransportName`")
    private String transportName;

    /**
     * ФИО контактного лица со стороны транспортной компании
     */
    @Column(name = "`TransportContactFio`")
    private String transportContactFio;

    /**
     * Адрес транспортной компании
     */
    @Column(name = "`TransportAddress`")
    private String transportAddress;

    /**
     * Телефон транспортной компании
     */
    @Column(name = "`TransportTel`")
    private String transportTel;

    /**
     * Адрес получателя
     */
    @Column(name = "`TargetAddress`")
    private String targetAddress;

    /**
     * ФИО контактного лица со стороны получателя
     */
    @Column(name = "`TargetContactFio`")
    private String targetContactFio;

    /**
     * Телефон получателя
     */
    @Column(name = "`TargetTel`")
    private String targetTel;

    /**
     * Интервал до даты отгрузки по-умолчанию.
     * Это поле позволяет устанавливать для нового заказа дату отгрузки автоматически, как текущая дата плюс значение данного поля.
     */
    @Column(name = "`Period`")
    private int period;

    /**
     * Комментарий
     */
    @Column(name = "`Comment`")
    private String comment;

    /**
     * Копировать информацию о доставкее из клиента в заказ
     */
    public void copyTo(OrderDeliveryInfoExt odie) {
        odie.setPayType(getPayType());
        odie.setTransportName(getTransportName());
        odie.setTransportContactFio(getTransportContactFio());
        odie.setTransportAddress(getTransportAddress());
        odie.setTargetAddress(getTransportAddress());
        odie.setTargetContactFio(getTargetContactFio());
        odie.setTransportTel(getTransportTel());
        odie.setTargetAddress(getTargetAddress());
        odie.setTargetContactFio(getTargetContactFio());
        odie.setTargetTel(getTargetTel());
        odie.setPeriod(getPeriod());

        if (StringUtils.isEmpty(odie.getComment())) {
            odie.setComment(getComment());
        } else {
            odie.setComment(odie.getComment() + " " + getComment());
        }
    }

    public long getClientId() {
        return clientId;
    }

    public void setClientId(long clientId) {
        this.clientId = clientId;
    }

    public boolean getPayType() {
        return payType;
    }

    public void setPayType(boolean payType) {
        this.payType = payType;
    }

    public String getTransportName() {
        return transportName;
    }

    public void setTransportName(String transportName) {
        this.transportName = transportName;
    }

    public String getTransportContactFio() {
        return transportContactFio;
    }

    public void setTransportContactFio(String transportContactFio) {
        this.transportContactFio = transportContactFio;
    }

    public String getTransportAddress() {
        return transportAddress;
    }

    public void setTransportAddress(String transportAddress) {
        this.transportAddress = transportAddress;
    }

    public String getTransportTel() {
        return transportTel;
    }

    public void setTransportTel(String transportTel) {
        this.transportTel = transportTel;
    }

    public String getTargetAddress() {
        return targetAddress;
    }

    public void setTargetAddress(String targetAddress) {
        this.targetAddress = targetAddress;
    }

    public String getTargetContactFio() {
        return targetContactFio;
    }

    public void setTargetContactFio(String targetContactFio) {
        this.targetContactFio = targetContactFio;
    }

    public String getTargetTel() {
        return targetTel;
    }

    public void setTargetTel(String targetTel) {
        this.targetTel = targetTel;
    }

    public int getPeriod() {
        return period;
    }

    public void setPeriod(int period) {
        this.period = period;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }
}